﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Uurrooster_opdracht
{
    public partial class FormLokalen : Form
    {

        //================================VARIABELEN==================================
        DataClasses1DataContext DB;
        List<tblLokaal> LIJSTLOKALEN;
        




        //================================INITIALISEREN================================
        public FormLokalen()
        {
            InitializeComponent();
            DB = new DataClasses1DataContext();
            LIJSTLOKALEN = DB.tblLokaals.ToList();
        }


        private void FormLokalen_Load(object sender, EventArgs e)
        {
            enableAllButtons();
            updateTotal();
            butFirst_Click(null, null);
        }




        //===============================HANDLERS VOOR ALLE BUTONS=====================
        private void butFirst_Click(object sender, EventArgs e)
        {
            long EERSTE_ID = LIJSTLOKALEN.First().lokaalID;

            this.dipslayLokaal(EERSTE_ID);

            //de knoppen mogen terug aan, als ze afstonden!
            enableAllButtons();

        }


        private void butNext_Click(object sender, EventArgs e)
        {
            //algemene voorbereiding
            LIJSTLOKALEN = DB.tblLokaals.ToList();

            //inlezen van de studentenID die momenteel in het tekstvenster staat
            String huidigeID = txtLokaalID.Text;

            //omzetten naar een long
            long huidigeLokaalID = Convert.ToInt64(huidigeID);

            //startwaarde om positie van huidige student in lijst te zoeken
            int index = -1;

            //index laten oplopen zolang de juiste student niet gevonden is
            //totdat einde lijst bereikt is
            do
            {
                index++; //opmerking : feitelijk starten we bij item nr 0
            }
            while ((LIJSTLOKALEN[index].lokaalID != huidigeLokaalID) &&
                   (index < LIJSTLOKALEN.Count()));

            //nu wordt overgeschakeld van de huidige student op de volgende student
            index++;

            //de loop wordt verlaten indien alle elementen uit de lijst zijn doorlopen
            //in dat geval = index gelijk aan Count()
            //in dat geval -> doe niets
            if (index == LIJSTLOKALEN.Count())
            {
                disableAllButtons();
                butFirst.Enabled = true;
                txtLokaalNaam.Text = "GEEN NEXT!";
                txtLokaalLocatie.Text = "GEEN NEXT!";
                txtLokaalID.Text = "GEEN NEXT!";
                return;
            }

            //de loop wordt ook verlaten in dat geval is de index gelijk aan de huidig af te beelden 
            //student
            if (index < LIJSTLOKALEN.Count())
            {
                this.dipslayLokaal(LIJSTLOKALEN[index].lokaalID);
            }

        }



        private void butAdd_Click(object sender, EventArgs e)
        {
            //de informatie in de tekstvelden moet kunnen omgezet worden naar een string
            //van lengte 20
            tblLokaal NIEUW = new tblLokaal();
            NIEUW.lokaalNaam = txtLokaalNaam.Text;
            NIEUW.lokaalLocatie = txtLokaalLocatie.Text;

            //submitten van de creatie van de nieuwe student
            DB.tblLokaals.InsertOnSubmit(NIEUW);
            DB.SubmitChanges();

            //updaten van de scherminfo
            this.dipslayLokaal(NIEUW.lokaalID);
        }



        private void butEdit_Click(object sender, EventArgs e)
        {
                //inlezen van de studentenID die momenteel in het tekstveld staat
                String huidigeID = txtLokaalID.Text;

                //omzetten naar een long
                long huidigeLokaalID = Convert.ToInt64(huidigeID);

                //opzoeken van student met dit StudentenID
                tblLokaal gekozen = (from tblLokaal
                                      in DB.tblLokaals
                                      where tblLokaal.lokaalID == huidigeLokaalID
                                      select tblLokaal).First();

                //de tekstvelden moet gereduceerd worden tot lengte 20 characters!
                //de info uit de tekstvelden naar een lengte brengen die zeker 20 characters is
                //en dit om mogelijke format-Out_of_Bounds Exceptions te voorkomen in de database!

                //de info uit de tekstvelden opslaan
                gekozen.lokaalNaam = txtLokaalNaam.Text.PadRight(20);
                gekozen.lokaalNaam = gekozen.lokaalNaam.Substring(0, 20);

                gekozen.lokaalLocatie = txtLokaalLocatie.Text.PadRight(20);
                gekozen.lokaalLocatie = gekozen.lokaalLocatie.Substring(0, 20);

                //de aangepaste gegevens nu nog opslaan in de database
                DB.SubmitChanges();

                //updaten van scherminfo
                dipslayLokaal(gekozen.lokaalID);
            

        }

        private void butDelete_Click(object sender, EventArgs e)
        {
            //inlezen van de studentenID die momenteel in het tekstvenster staat
            String huidigeID = txtLokaalID.Text;

            //omzetten naar een long
            long huidigeStudentID = Convert.ToInt64(huidigeID);

            //de te deleten student selecteren uit de database
            tblLokaal magweg = (from tblLokaal
                                 in DB.tblLokaals
                                 where tblLokaal.lokaalID == huidigeStudentID
                                 select tblLokaal).First();

            //doorvoeren wijzigingen
            DB.tblLokaals.DeleteOnSubmit(magweg);
            DB.SubmitChanges();

            //updaten van het schermgebeuren
            butFirst_Click(null, null);

        }



        private void butClear_Click(object sender, EventArgs e)
        {
            txtLokaalNaam.Text = "";
            txtLokaalLocatie.Text = "";
            txtLokaalID.Text = "***";

            //knop add mag nu actief zijn !
            disableAllButtons();
            butAdd.Enabled = true;

        }

    
    

        //===================================HULP METHODEN================================

        //zet alle knoppen actief
        private void enableAllButtons()
        {
            butFirst.Enabled = true;
            butNext.Enabled = true;
            butAdd.Enabled = false;  //uitzondering! kan alleen indien men eerst op new drukt
            butDelete.Enabled = true;
            butEdit.Enabled = true;
            butClear.Enabled = true;
        }



        //zet allen knoppen af
        private void disableAllButtons()
        {
            butFirst.Enabled = true;  //uitzondering: mag altijd aanblijven staan...
            butNext.Enabled = false;
            butAdd.Enabled = false;
            butDelete.Enabled = false;
            butEdit.Enabled = false;
            butClear.Enabled = false;
        }




        //zorg dat het totaal van de student wordt geupdate
        private void updateTotal()
        {
            //update van de lijsten
            LIJSTLOKALEN = DB.tblLokaals.ToList();
            //update van het totaal
            lblTotaal.Text = "" + LIJSTLOKALEN.Count();
        }



        private void dipslayLokaal(long X)
        {
            //voor alle veiligheid ook het totaal updaten
            updateTotal();

            //opzoeken van student met dit StudentenID
            tblLokaal gekozen = (from tblLokaal
                                  in DB.tblLokaals
                                  where tblLokaal.lokaalID == X
                                  select tblLokaal).First();

            //gegevens in de tekstvelden zetten
            txtLokaalNaam.Text = gekozen.lokaalNaam;
            txtLokaalLocatie.Text = gekozen.lokaalLocatie;
            txtLokaalID.Text = gekozen.lokaalID + "";
        }







    
    }
}
